﻿


#include <stdio.h>
//float类型在内存中的存储方式
//关于位段在VS编译器底下的存储方式
//联合体在内存中的存储方式
//联合体的一个练习：用联合体判断大小端
//枚举类型的使用

//int main()
//{
//	int n = 2139095044;
//	//011111111000000000000000000001001
//	float* pFloat = (float*)&n;
//	//存入float类型中
//	// 0 00000000 00000000000000000001001
//	//取出时看 E为00000000  根据取出规则
//	//E=1-127=-126   是一个无限接近于0的数=0；
//	printf("n的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//	*pFloat = 9.0;
//	//0 10000010 00100000000000000000000
//	//当按照整形类型取出
//	//以：01000001000100000000000000000000 取出
//	printf("num的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//	return 0;
//}

//struct MyStruct
//{
//	char arr[19];
//	int a;
//	int b;
//};
//
//int main()
//{
//	struct MyStruct s = { 0 };
//	printf("%zd", sizeof(struct MyStruct));
//
//	return 0;
//}


//关于位段在VS编译器底下的存储方式
struct ST
{
	char a : 3;
	char b : 4;
	char c : 5;
	char d : 4;
};

//int main()
//{
//	struct ST s = { 0 };
//	s.a = 10;
//	s.b = 20;
//	s.c = 3;
//	s.d = 4;
//
//	return 0;
//}


//联合体在内存中的存储方式
union U
{
	char a[9];
	int b;
};

//int main()
//{
//	union U uu = { 0 };
//	printf("%zd\n", sizeof(uu));
//	printf("%p\n", &uu);
//	printf("%p\n", &(uu.a));
//	printf("%p\n", &(uu.b));
//
//	return 0;
//}

//联合体的一个练习：用联合体判断大小端
int check_sys()
{
	union
	{
		int i;
		char c;
	}un;
	un.i = 1;
	return un.c;//返回1是⼩端，返回0是⼤端
}

//int main()
//{
//
//	int ret=check_sys();
//	if (ret == 1)
//		printf("当前机器是小端");
//	else
//		printf("当前机器是大端");
//	return 0;
//}


//优美的代码
union T
{
	int x;
	struct
	{
		char a;
		char b;
		char c;
		char d;
	}My;
};

//int main()
//{
//	union T t = { 0 };
//	t.x = 0x11223344;
//	printf("%x %x %x %x", t.My.a, t.My.b, t.My.c, t.My.d);
//
//	return 0;
//}


//枚举类型的使用
enum SEX
{
	Male=10,
	Female,
	Secrect
};

int main()
{
	printf("%d\n", Male);
	printf("%d\n", Female);
	printf("%d\n", Secrect);

	int arr[Male] = { 0 };
	return 0;
}